package fr.upmc.alasca.centreCalcul.interne.machinePhysique.machineVirtuelle.ports;

import fr.upmc.alasca.centreCalcul.interne.machinePhysique.MachinePhysique;
import fr.upmc.alasca.centreCalcul.interne.machinePhysique.machineVirtuelle.MachineVirtuelle;
import fr.upmc.alasca.centreCalcul.interne.machinePhysique.machineVirtuelle.interfaces.MachineVirtuelleApplicationI;
import fr.upmc.alasca.centreCalcul.objets.Requete;
import fr.upmc.components.ComponentI;
import fr.upmc.components.ports.AbstractInboundPort;

/**
 * @author Antoine Lavaire, Sabri Labassi, Thibaut Fleury, Ryme Fantazi
 */
public	class	MachineVirtuelleApplicationInboundPort
extends			AbstractInboundPort
implements		MachineVirtuelleApplicationI
{
	private static final long serialVersionUID = 1L;

	
	
	public		MachineVirtuelleApplicationInboundPort
	(
			String uri,
			ComponentI owner
	) throws	Exception
	{
		super(uri, MachineVirtuelleApplicationI.class, owner);
		
		assert uri != null && (owner instanceof MachineVirtuelle || owner instanceof MachinePhysique);
	}

	
	/**
	 * @see fr.upmc.alasca.centreCalcul.interne.machinePhysique.machineVirtuelle.interfaces.MachineVirtuelleApplicationI#soumettreRequete(fr.upmc.alasca.centreCalcul.objets.Requete)
	 */
	@Override
	public	void	soumettreRequete
	(
			Requete	requete
	) throws	Exception
	{
		if (owner instanceof MachineVirtuelle) {
			final MachineVirtuelle mv = (MachineVirtuelle)this.owner;
			mv.soumettreRequete(requete);
		}
		else if (owner instanceof MachinePhysique) {
			final MachinePhysique mp = (MachinePhysique)this.owner;
			mp.soumettreRequete(this.getPortURI(), requete);
		}
	}

}
